1. Field of the Invention
The present invention relates to techniques for improving computer system performance. More specifically, the present invention relates to a space-efficient and power-efficient register file for a multiple-issue processor.
2. Related Art
As semiconductor integration densities continue to increase, it is becoming common practice to incorporate multiple functional units into a single microprocessor core. For example, some processors presently include multiple arithmetic logic units (ALUs), as well as a branch pipeline and a memory pipeline. These multiple functional allow the processor to execute instructions in parallel, which can greatly increase processor performance. These processors, which support simultaneous execution of multiple instructions, are generally referred to as “multiple-issue processors” because they allow multiple instructions to be issued at the same time.
In order to support simultaneous execution of multiple instructions, multiple-issue processors require register files with multiple read ports and multiple write ports. For example, a multiple-issue processor with 2 ALUs, a branch pipe and a memory pipe might require 7 read ports (2 for each of the 2 ALUs and three for the memory pipe) and 3 write ports (1 for each of the 2 ALUs and one for the memory pipe).
In the worst case, during a read operation all of the read ports will simultaneously access a single register. In existing register files, this worst-case read operation requires a driver within each memory cell of the target register to simultaneously drive bitlines for all of the read ports. (Note that it is possible to restrict the number of reads that can be directed to a single register, but this restricts processor performance and can greatly complicate processor/compiler design because the processor/compiler must ensure that only a limited number of read ports can simultaneously read from the register file.)
In order to simultaneously drive multiple bitlines, larger drivers must be incorporated into memory cells. However, these larger drivers consume more power and also require more chip area. This increases the size of each memory cell, which increases the overall size of memory cell array. A larger memory array increases the size of the bitlines that must be driven by the memory cells, which further increases the size of the drivers within the memory cells. This can result in a very large register file, which consumes a large amount of power and requires a long access time.
Hence, what is needed is a register file design that allows multiple reads ports to simultaneously read data from a single register without requiring large drivers in all of the memory cells.